home *** CD-ROM | disk | FTP | other *** search
/ Aminet 45 / Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso / Aminet / game / role / ldmud-3.2-bin.lha / mud / doc / efun / sprintf.de < prev    next >
Text File  |  2001-04-23  |  6KB  |  141 lines

  1. SYNOPSIS
  2.     string sprintf(string fmt, ...)
  3.  
  4. BESCHREIBUNG
  5.     Mit dieser Funktion kann man auf einfache Weise aus dem Inhalt
  6.     von Variablen einen String bauen; und dies effektiver als
  7.     mit der ueblichen "Du hast "+anzahl+" Punkt(e)"-Methode.
  8.  
  9.     Die Funktion bekommt als erstes Argument einen Formatstring fmt,
  10.     der Informationen darueber enthaelt, wie die weiteren beliebigen
  11.     Argumente in den Ergebnisstring eingebaut werden sollen.
  12.     Die meisten Zeichen gelangen vom Formatstring unveraendert in
  13.     den Ausgabestring. Die Regeln zum Einbau eines Arguments werden
  14.     immer mit '%' eingeleitet. Moechte man ein '%' in die Ausgabe
  15.     bringen, so muss man im Formatstring "%%" verwenden.
  16.  
  17.     Ein einfaches Beispiel ist erg=sprintf("%s %d", str, i);
  18.     '%' leitet einen Argumentformatstring (AFS) ein. Das 's' schliesst
  19.     ihn ab und besagt, dass ein String eingebaut werden soll. Das
  20.     folgende Leerzeichen wird unveraendert uebernommen. '%' leitet
  21.     wieder einen neuen Formatstring ein, wobei 'd' eine Ganzzahl
  22.     bezeichnet (eine Variable von Typ int).
  23.     Dies ist ein allerdings nur ein sehr einfaches Beispiel.
  24.  
  25.     Jeder Argumentformatstring kennzeichnet also, auf welche Art
  26.     ein Argument in das Ergebnis eingebaut werden soll. Der erste
  27.     AFS ist fuer das zweite Argument der Funktion, der zweite AFS
  28.     fuer das dritte Argument u.s.w. (das erste Argument der Funktion
  29.     ist ja der Formatstring selbst).
  30.  
  31.     Jeder AFS beginnt mit einem '%' und endet mit einem der
  32.     folgenden Zeichen (Argumenttyp-Kennzeichner):
  33.     Zeichen    Argumenttyp    Bemerkung
  34.     's'        string
  35.     'd' 'i'    integer        Dezimalschreibweise
  36.     'o'        integer        Oktalschreibweise
  37.     'x' 'X'    integer        Hexadezimalschreibweise
  38.     'e' 'E'    float          Exponentialschreibweise
  39.     'f' 'F'    float          Gleitkommadarstellung
  40.     'g' 'G'    float          Gleitkommadarstellung
  41.     'O'        mixed          Gibt fuer Debugging alles irgendwie
  42.                   lesbar aus, auch Arrays und Mappings
  43.     
  44.     Zwischen dem '%' und dem Argumenttyp-Kennzeichner kann man
  45.     noch mehrere Modifikatoren setzen, die das Verhalten
  46.     beeinflussen.
  47.     Hier eine Uebersicht. n steht hier fuer eine Ganzzahl, also
  48.     zum Beispiel "12".
  49.     Modifikator  Bedeutung
  50.     n            Minimale Stringlaenge, die fuer dieses Argument
  51.              verwendet werden soll. Fehlende Zeichen werden mit
  52.              einem Fuellzeichen aufgefuellt. Beginnt n mit einer
  53.              '0' (etwa "08") so ist das Fuellzeichen '0' sonst
  54.              ist es per Default ' '. (sogenannte 'Feldbreite')
  55.     .n           Bei Ganzzahlen die Maxanzahl der Stellen, bei Gleit-
  56.              kommazahlen die Maximalzahl der Nachkommastellen.
  57.              Bei (einfachen) Strings die Maximallaenge.
  58.     :n           Ist dasselbe wie n.n - setzt also beide Werte auf
  59.              dieselbe Zahl.
  60.     'X'          Als Fuellzeichen wird X genutzt. X koennen dabei
  61.              auch mehrere Zeichen sein, etwa fuehrt '-=' zu
  62.              Fuellungen der Art "-=-=-=-=". Um mit Hochkommas
  63.              zu fuellen ist '\\'' anzugeben. Rueckwaerts-
  64.              schraegstrich entsprechend mit '\\\\'.
  65.     <Space>      Vor positive Zahlen wird ein Leerzeichen gefuegt.
  66.     +            Vor positive Zahlen wird ein '+' gefuegt.
  67.     -            Der Wert wird linksbuendig in das fuer dieses Argument
  68.              vorgesehene Feld eingefuegt (Standard ist rechts-
  69.              buendig). Bei Strings wird meistens diese Ausrichtung
  70.              die sinnvollste sein.
  71.     |            Der Wert wird zentriert in das Feld eingefuegt.
  72.                      (Siehe Modifikator n, Feldbreite)
  73.     =            Spaltenmodus (siehe unten).
  74.     #            Tabellenmodus (siehe unten).
  75.     @            Arraymodus (siehe unten).
  76.     *            Ein Stern kann immer dort eingesetzt werden, wo
  77.              hier weiter oben ein n fuer eine Ganzzahl steht.
  78.              Der Wert der Zahl muss dann als weiterer Parameter
  79.              an die Funktion uebergeben werden.
  80.  
  81. BEISPIELE
  82.     Mit den bis jetzt erwaehnten Moeglichkeiten kann man zB machen:
  83.  
  84.     sprintf("%d (dec) == %o (octal) == %x (hex)", 20, 20, 20);
  85.     => "20 (dec) == 24 (octal) == 14 (hex)"
  86.  
  87.     sprintf("Du drehst den Knopf um %.3f Umdrehungen", 12.3456);
  88.     => "Du drehst den Knopf um 12.345 Umdrehungen"
  89.  
  90.     sprintf("Du liest %|'*':9s", "Fiona");
  91.     => "Du liest **Fiona**"
  92.  
  93.     sprintf("Auf dem Zettelstueck steht: %-.*s...", 7, "Hallo Du da");
  94.     => "Auf dem Zettelstueck steht: Hallo D...
  95.  
  96. ERWEITERTE MODI
  97.     Mit dem Modifikatoren = # und @ stehen maechtige Werkzeuge zur
  98.     Verfuegung. Mit ein wenig Ueberlegung kann man sich oft viele
  99.     Zeilen Code ersparen.
  100.     Arraymodus (@):
  101.       sprintf("%@s", arr_of_string);
  102.       Der Argumentformatstring (allerdings ohne das @) wird sooft
  103.       hintereinandergereiht, wieviele Elemente das Array hat.
  104.       Jeder AFS wird dann fuer ein Element des Arrays benutzt.
  105.       sprintf("%@s", ({"aaa","bbb"})) ist somit dasselbe wie
  106.       sprintf("%s%s", "aaa", "bbb"). Allerdings passt es sich
  107.       immer an die Elementzahl der uebergebenden Arrays an.
  108.       Dies ist nuetzlich um Ergebnisse von map_array() oder aehnlich
  109.       auszugeben.
  110.       sprintf("%@s", map_objects(all_inventory(), "short"));
  111.       Der Argumenttyp-Kennzeichner muss hierbei immer dem Typen
  112.       eines Elementes des Arrays entsprechen.
  113.     Spaltenmodus (=):
  114.       Diese Funktion bricht Text um. Die Feldbreite muss angegeben
  115.       werden. Wird neben der Feldbreite auch eine maximale String-
  116.       laenge angegeben, so wird die letztere fuer die Breite des
  117.       Umbrechens verwendet, die Feldbreite wird mit Fuellzeichen
  118.       aufgefuellt.
  119.       sprintf("%=-20s", str); bricht den String str 'wordwrap'end
  120.       auf 20 Zeichen Laenge um. sprintf("%=-*s", len, str);
  121.       ist schon eine einfache break_string() Variante.
  122.     Tabellenmodus (#):
  123.       Diese Funktion gibt Strings tabellenartig aus. Die Teilstrings
  124.       muessen mit \n getrennt als ein String als Argument uebergeben
  125.       werden. Die Feldbreite muss angegeben werden und bezeichnet
  126.       die (maximale) Gesamtbreite der Tabelle.
  127.       Die Anzahl der Spalten der Tabelle wird moeglichst optimal
  128.       bestimmt, und ist fuer alle Spalten gleich. Wird ein
  129.       Wert als 'Praezision' angegeben, so ist dies die Anzahl von
  130.       Spalten, die verwendet werden soll.
  131.       sprintf("%#30.4s", str) erzeugt eine Tabelle, die maximal
  132.       30 Zeichen breit ist und 4 Spalten enthaelt.
  133.       sprintf("%#30s", str) legt die Spaltenzahl dynamisch anhand
  134.       der Einzelstringlaengen fest, so dass der laengste String
  135.       noch genau in die Tabelle passt.
  136.       Wenn string* worte die in die Tabelle einzubettenden Worte
  137.       enthaelt, so muss str=implode(worte,"\n") sein.
  138.  
  139. SIEHE AUCH:
  140.     printf(E)
  141.